
// guarda solo los numeros de bloques que en el archivo van a estar libres.
// si el numero no esta en este archivo devuelvo un -1

#ifndef GESTORBLOQUESLIBRES_H_
#define GESTORBLOQUESLIBRES_H_
#include <string.h>
#include <fstream>
#include "../Utilitarios/Utilitarios.h"
#include "../Comunes/CadenaBytes.h"
#include "../Comunes/Persistor.h"

class GestorBloquesLibres {
private:
	Persistor* persistor;

	/*
	 * Metodo que elimina el primer bloque del archivo de nodos libres
	 * Pre: el archivo debe tener al menos un bloque
	 * Pos: el archivo queda con un bloque menos.
	 */
	void eliminarPrimerBloque();

	void eliminarUltimoBloque();
public:
	/*
	 * Constructor
	 */
	GestorBloquesLibres(string rutaArchivo);

	/*
	 * Metodo que sirve para agregar un nuevo Bloque (nroAAgregar) libre al archivo.
	 * Pre: El archivo tiene que existir y estar abierto.
	 * Pos: agrega el nuevo Bloque.
	 */
	void agregarBloqueLibre(int nroAAgregar);

	/*
	 * Metodo que sirve para saber si hay Bloques dentro del archivo
	 * Pre:
	 * Pos: TRUE hay al menos un bloque, sino FALSE
	 */
	bool hayLibres();

	/*
	 * Metodo que informa sobre la cantidad de bloques libres existentes
	 */
	int cantidadLibres();
	/*
	 * Metodo que devuelve el primer bloque (bloque libre) del archivo
	 * Pre: El archivo debe existir, estar abierto y tener al menos 1 bloque.
	 * Pos: Devuelve el nro del bloque libre, si el archivo esta vacio,
	 * 		devuelve -1;
	 */
	int getBloqueLibre();

	string toString();

	/*
	 * Destructor
	 */
	virtual ~GestorBloquesLibres();
};

#endif /* GESTORBLOQUESLIBRES_H_ */
